﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using SIIE_ERP.BaseDatos;
using SIIE_ERP.View;
using System.Threading;

namespace Elysium.Demo.PuntoVenta.Transacciones
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class AperturaCaja_Alta : UserControl
    {
        UsuarioActivo _sesion;
        ScrollViewer _contenedor;

        public AperturaCaja_Alta(ref UsuarioActivo usuario, ScrollViewer Contenedor)
        {
            InitializeComponent();
            this._sesion = usuario;
            this._contenedor = Contenedor;
            CargarCatalogos();
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("AperturaCaja.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void CargarCatalogos()
        {
            ComboBoxUI.ComboCuentasBancarias(ComboCuentaOrigen, _sesion);
            ComboBoxUI.ComboTerminales(ComboTerminales, _sesion);   
        }

        private void Button_Guardar_Click(object sender, RoutedEventArgs e)
        {
            if (!Valida()) return;

            // Marcamos la consola como abierta
            _sesion.PV_CajaIsOpen = true;
            _sesion.PV_Id_Terminal = Int32.Parse(ComboTerminales.SelectedValue.ToString());

            // Movimiento de dinero de CB a la Cuenta de la terminal
            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Cuenta_Bancaria(_sesion.RFC, _sesion.UserName);
            var CuentaTerminal = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(_sesion.RFC, _sesion.UserName)
                                        .Get_Terminal_Por_Id(Int32.Parse(ComboTerminales.SelectedValue.ToString())).Rows[0]["Id_CuentaBancaria"].ToString();
            
            // Incrementa el saldo de la Cuenta de la Terminal
            db.Update_Saldo_Cuenta_Bancaria_Por_Id(Int32.Parse(CuentaTerminal), Double.Parse(CampoImporte.Text));


            // Calculamos el equivalente en la moneda de la cuenta
            var IdMonedaCuentaOrigen = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_Cuenta_Bancaria(_sesion.RFC, _sesion.UserName)
                                                        .Get_Cuenta_Bancaria_Por_Id(Int32.Parse(ComboCuentaOrigen.SelectedValue.ToString())).Rows[0]["Id_Moneda"].ToString();

            var MontoADescontarCuentaOrigen =
                    SIIE_ERP.Codigo.Bancos.Catalogos.TipoDeCambioCode.FromPesosToMoneda(Int32.Parse(IdMonedaCuentaOrigen), Double.Parse(CampoImporte.Text), _sesion);


            // Disminuye el saldo de la cuenta de origen
            db.Update_Saldo_Cuenta_Bancaria_Por_Id(Int32.Parse(ComboCuentaOrigen.SelectedValue.ToString()), MontoADescontarCuentaOrigen * (-1.0));

            
            // Registrar en conciliacion
            new SIIE_ERP.BaseDatos.Bancos.dbo_Trans_Conciliacion(_sesion.RFC, _sesion.UserName)
                        .Insert_Transaccion_Bancaria(ComboCuentaOrigen.SelectedValue.ToString(), CuentaTerminal, "0", IdMonedaCuentaOrigen, 
                                                     MontoADescontarCuentaOrigen.ToString(), "Apertura de caja");
            // Registrar movimiento en Apertura_Terminal
            new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Apertura_Terminal(_sesion.RFC, _sesion.UserName)
                        .Insert_Apertura_Terminal(ComboTerminales.SelectedValue.ToString(), _sesion.UserName, CampoImporte.Text, DateTime.Now.ToString(),
                                                  ComboCuentaOrigen.SelectedValue.ToString(), "");

            // Registrar en Mov Cja Trans_MovimientoDineroCaja
            new SIIE_ERP.BaseDatos.PuntoVenta.Transacciones.dbo_Trans_MovimientoDineroCaja(_sesion.RFC, _sesion.UserName)
                                .Insert_Trans_MovimientoDineroCaja("1", ComboTerminales.SelectedValue.ToString(), ComboCuentaOrigen.SelectedValue.ToString(),
                                                                    CuentaTerminal, CampoImporte.Text, "+");
            // Cargar consola
            CargarConsola();
        }

        private void CargarConsola()
        {
            _contenedor.Content = new Consola_Alta(ref _sesion);
        }

        private bool Valida()
        {
            if(ComboCuentaOrigen.SelectedValue == null)
            {
                MessageBox.Show("Debe seleccionar una cuenta bancaria"); return false;
            }
            if (ComboTerminales.SelectedValue == null)
            {
                MessageBox.Show("Debe seleccionar una terminal"); return false;
            }
            try { Double.Parse(CampoImporte.Text);  }
            catch(Exception)
            {
                MessageBox.Show("El importe debe ser numerico."); return false;
            }
            return true;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            (this.Parent as ScrollViewer).Content = null;
        }
    }
}
